/**
 * 微信服务器中间件
 */

var config = require('../config').wechat;
var sha1 = require('sha1');

async function auth(ctx, next) {
    // 只匹配根路径
    if (ctx.path == '/') {
        // 获取微信签名信息
        const { echostr, nonce, signature, timestamp } = ctx.query || {};
        // 校验请求是否来自微信服务器
        // 1）将token、timestamp、nonce三个参数进行字典序排序
        const token = config.token;
        const str = [token, timestamp, nonce].sort().join('');
        // 2）将三个参数字符串拼接成一个字符串进行sha1加密
        const sha1Str = sha1(str);
        // 3）开发者获得加密后的字符串可与signature对比，标识该请求来源于微信
        if (sha1Str == signature) {
            // 4) 判断是否是GET请求
            if (ctx.method == 'GET') {
                ctx.body = echostr;
            } else {
                await next();
            }
        } else {
            ctx.body = "该请求并非来自微信";
            await next();
        }
    } else {
        await next();
    }
}

module.exports = auth

